const Topic = require('../model/topics')
const User = require('../model/users')
const Question = require('../model/questions')

class TopicCtl {
  //检查话题是否存在
  async checkTopicExist(ctx, next) {
    const topic = await Topic.findById(ctx.params.id)
    if(!topic) {
      ctx.throw(404, "话题不存在")
    }
    await next()
  }
  async find(ctx) {
    const { per_page = 3, page = 1 } = ctx.query
    const perpage = Math.max(per_page * 1, 1)
    const pages = Math.max(page * 1, 1) - 1
    ctx.body = await Topic.find({ name: new RegExp(ctx.query.q) }).limit(perpage).skip(pages * perpage)
  }
  async findById(ctx) {
    const { fields = '' } = ctx.query
    const selectField = fields.split(';').filter(f => f).map(f => ' +' + f).join('')
    const topic = await Topic.findById(ctx.params.id).select(selectField)
    ctx.body = topic
  }
  async create(ctx) {
    ctx.verifyParams({
      name: { type: 'string', required: true },
      avatar_url: { type: 'string', required: false },
      introduction: { type: 'string', required: false }
    })
    const topic = await new Topic(ctx.request.body).save()
    ctx.body = topic
  }

  async update(ctx) {
    ctx.verifyParams({
      name: { type: 'string', required: false },
      avatar_url: { type: 'string', required: false },
      introduction: { type: 'string', required: false }
    })
    const topic = await Topic.findByIdAndUpdate(ctx.params.id, ctx.request.body)
    ctx.body = topic
  }
  async listTopicFollower(ctx) {
    const user = await User.find({followingTopic: ctx.params.id})
    ctx.body = user
  }
  async listQuestions(ctx) {
    const questions = await Question.find({topic: ctx.params.id})
    ctx.body = questions
  }
}
module.exports = new TopicCtl()